package com.hedl.practice.diyJava.genericity.definition_genericty;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class Main {
    public static void main(String[] args) {
        /*Class<IntPair> clazz= IntPair.class;
        Type t = clazz.getGenericSuperclass();
        if (t instanceof ParameterizedType){
            ParameterizedType pt = (ParameterizedType) t;
            Type[] types = pt.getActualTypeArguments();     //可能有多个泛型类型
            Type firstType = types[0];      //取第一个泛型类型
            Class<?> typeClass = (Class<?>) firstType;
            System.out.println(typeClass);
        }*/

        /**
         * 无法获取带泛型的class，因为T是Object，是临时的，是使用时即使标记的类型；
         * 如果是子类继承了父类；子类给了父类泛型固定的类型，那么通过子类反射是可以拿到子类给父类赋予的泛型的类型的；如上述代码；
         */
        Pair<String> p1 = new Pair<>("Hello","World");
        Pair<Integer> p2 = new Pair<>(123,456);
        Class c1 = p1.getClass();
        Class c2 = p2.getClass();

        System.out.println(c1 == c2);
        System.out.println(c1 == Pair.class);
    }
}
